home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / librarys / edlib11.1 < prev    next >
Internet Message Format  |  1989-04-26  |  62KB

  1. Path: xanth!ames!oliveb!sun!rishathra!page
  2. From: page%rishathra@Sun.COM (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i097:  edlib - library of functions for manx v1.1, Part01/02
  5. Message-ID: <101383@sun.Eng.Sun.COM>
  6. Date: 26 Apr 89 20:44:49 GMT
  7. Sender: news@sun.Eng.Sun.COM
  8. Lines: 1808
  9. Approved: page@sun.com
  10.  
  11. Submitted-by: hcrvax!edwin (Edwin Hoogerbeets)
  12. Posting-number: Volume 89, Issue 97
  13. Archive-name: libraries/edlib11.1
  14.  
  15. Changes since initial release:
  16.   - fixed a bug in strnicmp. Thanks to Richard Sexton for pointing this
  17.     out and suggesting a fix
  18.   - added basename, chdir, getcwd, filetype, isdir, isfile, strdup
  19.     and strtod
  20.   - added register declarations where possible
  21.  
  22. [uuencoded libraries included.  ..bob]
  23.  
  24. # This is a shell archive.
  25. # Remove anything above and including the cut line.
  26. # Then run the rest of the file through 'sh'.
  27. # Unpacked files will be owned by you and have default permissions.
  28. #----cut here-----cut here-----cut here-----cut here----#
  29. #!/bin/sh
  30. # shar: SHell ARchive
  31. # Run the following text through 'sh' to create:
  32. #    BaseName.man
  33. #    BinToInt.man
  34. #    ChDir.man
  35. #    DecToInt.man
  36. #    FileType.man
  37. #    GetCWD.man
  38. #    GetOpt.man
  39. #    HexToInt.man
  40. #    IsBDigit.man
  41. #    IsCSym.man
  42. #    IsCSymF.man
  43. #    IsDir.man
  44. #    IsFile.man
  45. #    IsODigit.man
  46. #    ReadMe
  47. #    ReadMe.USENET
  48. #    SToLower.man
  49. #    SToUpper.man
  50. #    StrCSPN.man
  51. #    StrDup.man
  52. #    StrICmp.man
  53. #    StrNICmp.man
  54. #    StrPBrk.man
  55. #    StrPos.man
  56. #    StrRPBrk.man
  57. #    StrRPos.man
  58. #    StrSPN.man
  59. #    StrToD.man
  60. #    StrTok.man
  61. #    ToInt.man
  62. #    barrett.doc
  63. #    basename.c
  64. #    bintoint.c
  65. #    chdir.c
  66. #    dectoint.c
  67. #    ed.lib.uu
  68. # This is archive 1 of a 2-part kit.
  69. # This archive created: Wed Apr 26 13:37:38 1989
  70. echo "extracting BaseName.man"
  71. sed 's/^X//' << \SHAR_EOF > BaseName.man
  72. XBASENAME(3)                Library Functions               BASENAME(3)
  73. X
  74. X
  75. X
  76. XNAME
  77. X     basename - return the file name in a full path specification
  78. X
  79. XSYNOPSIS
  80. X     #include <edlib.h>
  81. X
  82. X     char *basename(path)
  83. X     char *path;
  84. X
  85. XDESCRIPTION
  86. X     Basename will return a pointer to the file name in a full
  87. X     AmigaDOS path specification. If there is no directory part
  88. X     specified in the path, a pointer to the first character in
  89. X     the string is returned. If there is no file name, a pointer
  90. X     to the null which terminates the path parameter is returned.
  91. X
  92. XEXAMPLE
  93. X     basename("foo:42")              is "42"
  94. X     basename("foo:bar/Arthur Dent") is "Arthur Dent"
  95. X     basename("RAYGUN:")             is ""
  96. X     basename("rutabega")            is "rutabega"
  97. X
  98. XAUTHOR
  99. X     Edwin Hoogerbeets 01/08/88
  100. X
  101. X
  102. X
  103. SHAR_EOF
  104. echo "extracting BinToInt.man"
  105. sed 's/^X//' << \SHAR_EOF > BinToInt.man
  106. XBINTOINT(3)                Library Functions               BINTOINT(3)
  107. X
  108. X
  109. X
  110. XNAME
  111. X     bintoint - give the binary value of a string of binary digits
  112. X
  113. XSYNOPSIS
  114. X     #include <edlib.h>
  115. X
  116. X     int bintoint(number)
  117. X     char *number;
  118. X
  119. XDESCRIPTION
  120. X     Bintoint takes a string that may have been read in with scanf(3)
  121. X     or from the console, and treats it as if it were a binary number.
  122. X     The integer value of the binary number is returned. Bintoint
  123. X     stops at the first character that is not a '1' or a '0'. If the
  124. X     first character in the string is not a binary digit, then a value
  125. X     of 0 is returned.
  126. X
  127. XAUTHOR
  128. X     Edwin Hoogerbeets 01/08/88
  129. X
  130. XSEE ALSO
  131. X     dectoint(3), hextoint(3), toint(3)
  132. X
  133. X
  134. X
  135. SHAR_EOF
  136. echo "extracting ChDir.man"
  137. sed 's/^X//' << \SHAR_EOF > ChDir.man
  138. XCHDIR(3)                   Library Functions                  CHDIR(3)
  139. X
  140. X
  141. X
  142. XNAME
  143. X     chdir - change directory to a given AmigaDOS path
  144. X
  145. XSYNOPSIS
  146. X     #include <edlib.h>
  147. X
  148. X     int chdir(path)
  149. X     char *path;
  150. X
  151. XDESCRIPTION
  152. X     Chdir changes the current working directory of the calling task
  153. X     to the path given in the path variable. The path may be any
  154. X     valid AmigaDOS path, including path names relative to the present
  155. X     current working directory.
  156. X
  157. XDIAGNOSTICS
  158. X     If an error occurs while trying to change directory, a value of
  159. X     -1 is returned and the external variable errno is set to one of:
  160. X
  161. X       [EFAULT]  The path variable was a null pointer.
  162. X
  163. X       [ENOENT]  The path variable did not contain the name of a
  164. X                 directory.
  165. X
  166. X       [EACCES]  Chdir could not get a lock on the given directory.
  167. X                 [this error should be rare]
  168. X
  169. X     Otherwise, chdir returns a 0.
  170. X
  171. XAUTHOR
  172. X     Edwin Hoogerbeets 20/03/89
  173. X
  174. XSEE ALSO
  175. X     getcwd(3)
  176. X
  177. X
  178. X
  179. SHAR_EOF
  180. echo "extracting DecToInt.man"
  181. sed 's/^X//' << \SHAR_EOF > DecToInt.man
  182. XDECTOINT(3)                Library Functions               DECTOINT(3)
  183. X
  184. X
  185. X
  186. XNAME
  187. X     dectoint - give the decimal value of a string of decimal digits
  188. X
  189. XSYNOPSIS
  190. X     #include <edlib.h>
  191. X
  192. X     int dectoint(number)
  193. X     char *number;
  194. X
  195. XDESCRIPTION
  196. X     Dectoint takes a string that may have been read in with scanf(3)
  197. X     or from the console, and treats it as if it were a decimal number.
  198. X     The integer value of the decimal number is returned. Dectoint
  199. X     stops at the first character that is not a decimal digit. If the
  200. X     first character in the string is not a decimal digit, then a value
  201. X     of 0 is returned.
  202. X
  203. XAUTHOR
  204. X     Edwin Hoogerbeets 01/08/88
  205. X
  206. XSEE ALSO
  207. X     bintoint(3), hextoint(3), toint(3)
  208. X
  209. X
  210. X
  211. SHAR_EOF
  212. echo "extracting FileType.man"
  213. sed 's/^X//' << \SHAR_EOF > FileType.man
  214. XFILETYPE(3)                Library Functions               FILETYPE(3)
  215. X
  216. X
  217. X
  218. XNAME
  219. X     filetype - return the type of file referenced
  220. X
  221. XSYNOPSIS
  222. X     #include <edlib.h>
  223. X
  224. X     int filetype(path)
  225. X     char *path;
  226. X
  227. XDESCRIPTION
  228. X     Filetype examines the file referenced in the path parameter
  229. X     and returns the following tokens as its results:
  230. X
  231. X      [TYPE_DIR]   File is of type directory
  232. X
  233. X      [TYPE_FILE]  File is of type plain file.
  234. X
  235. XDIAGNOSTICS
  236. X     If an error occurs, then a value of -1 is returned and the
  237. X     external variable errno is set to one of:
  238. X
  239. X      [ENOMEM]  Not enough memory for temporary storage
  240. X
  241. X      [EACCES]  Could not get a lock on the specified file.
  242. X
  243. XAUTHOR
  244. X     Edwin Hoogerbeets 01/08/88
  245. X
  246. XSEE ALSO
  247. X     isdir(3), isfile(3)
  248. X
  249. X
  250. X
  251. SHAR_EOF
  252. echo "extracting GetCWD.man"
  253. sed 's/^X//' << \SHAR_EOF > GetCWD.man
  254. XGETCWD(3)                  Library Functions                 GETCWD(3)
  255. X
  256. X
  257. X
  258. XNAME
  259. X     getcwd - get the name of the current working directory
  260. X
  261. XSYNOPSIS
  262. X     #include <edlib.h>
  263. X
  264. X     char *getcwd(buffer,size)
  265. X     char *buffer;
  266. X     int size;
  267. X
  268. XDESCRIPTION
  269. X     Getcwd gets the name of the current working directory and puts
  270. X     the string formed in the area pointed to by buffer. Buffer is
  271. X     assumed to be at least size bytes long. If buffer is a null
  272. X     pointer, then getcwd will allocate size bytes, which should
  273. X     later be freed using the Manx free() function. In both cases,
  274. X     getcwd returns a pointer to the first character in buffer.
  275. X
  276. X     Note that getcwd will only give volume labels, and not device
  277. X     specifications, when constructing a directory name. Thus, if
  278. X     you are in the standard AmigaDOS recoverable ram disk, getcwd
  279. X     will return "RAMB0:" as the current working directory.
  280. X
  281. XDIAGNOSTICS
  282. X     If the current working directory cannot be determined, a null
  283. X     pointer is returned and any memory allocated (because the
  284. X     buffer parameter is null) is freed.
  285. X
  286. XAUTHOR
  287. X     Edwin Hoogerbeets 20/03/89
  288. X
  289. XSEE ALSO
  290. X     chdir(3)
  291. X
  292. X
  293. X
  294. SHAR_EOF
  295. echo "extracting GetOpt.man"
  296. sed 's/^X//' << \SHAR_EOF > GetOpt.man
  297. XGETOPT(3)                  Library Functions                 GETOPT(3)
  298. X
  299. X
  300. X
  301. XNAME
  302. X     getopt - get option letter from argv
  303. X
  304. XSYNOPSIS
  305. X     #include <edlib.h>
  306. X
  307. X     int getopt(argc, argv, optstring)
  308. X     inta argc;
  309. X
  310. X     char **optstring;
  311. X
  312. X     extern char *optarg;
  313. X     extern int optind;
  314. X
  315. XDESCRIPTION
  316. X     Getopt returns the next option letter in argv that matches a
  317. X     letter in optstring.  Optstring is a string of recognized
  318. X     option letters; if a letter is followed by a colon, the
  319. X     option is expected to have an argument that may or may not
  320. X     be separated from it by white space.  Optarg is set to point
  321. X     to the start of the option argument on return from getopt.
  322. X
  323. X     Getopt places in optind the argv index of the next argument
  324. X     to be processed.  Because optind is external, it is normally
  325. X     initialized to zero automatically before the first call to
  326. X     getopt.
  327. X
  328. X     When an option that is not in the list occurs, a NULL is
  329. X     returned and the optarg pointer is set to point to the
  330. X     first character of the null terminated string. This is done
  331. X     so that options may be specified with other parameters
  332. X     interspersed between them.
  333. X
  334. XDIAGNOSTICS
  335. X     Getopt prints an error message on stderr and returns a ques-
  336. X     tion mark (?) when it encounters an option letter not
  337. X     included in optstring.
  338. X
  339. XEXAMPLE
  340. X     The following code fragment shows how one might process the
  341. X     arguments for a command that can take the mutually exclusive
  342. X     options a and b, and the options f and o, both of which
  343. X     require arguments:
  344. X
  345. X          main(argc, argv)
  346. X          int argc;
  347. X          char **argv;
  348. X          {
  349. X               int c;
  350. X               extern int optind;
  351. X               extern char *optarg;
  352. X               .
  353. X               .
  354. X               .
  355. X                while ((c = getopt(argc, argv, "abf:o:")) != EOF)
  356. X                    switch (c) {
  357. X                    case `a':
  358. X                         if (bflg)
  359. X                              errflg++;
  360. X                         else
  361. X                              aflg++;
  362. X                         break;
  363. X                    case `b':
  364. X                         if (aflg)
  365. X                              errflg++;
  366. X                         else
  367. X                              bproc();
  368. X                         break;
  369. X                    case `f':
  370. X                         ifile = optarg;
  371. X                         break;
  372. X                    case `o':
  373. X                         ofile = optarg;
  374. X                         break;
  375. X                    case `?':
  376. X                    default:
  377. X                         errflg++;
  378. X                         break;
  379. X                    }
  380. X               if (errflg) {
  381. X                    fprintf(stderr, "Usage: ...");
  382. X                    exit(2);
  383. X               }
  384. X               for (; optind < argc; optind++) {
  385. X                    .
  386. X                    .
  387. X                    .
  388. X               }
  389. X               .
  390. X               .
  391. X               .
  392. X          }
  393. X
  394. XHISTORY
  395. X     Written by Henry Spencer, working from a Bell Labs manual
  396. X     page.  Modified by Keith Bostic to behave more like the Sys-
  397. X     tem V version. Ported to the Amiga and modified to take
  398. X     options anywhere by Edwin (Deepthot) Hoogerbeets.
  399. X
  400. XBUGS
  401. X     It is not obvious how `-' standing alone should be treated;
  402. X     this version treats it as a non-option argument, which is
  403. X     not always right.
  404. X
  405. X     Option arguments are allowed to begin with `-'; this is rea-
  406. X     sonable but reduces the amount of error checking possible.
  407. X     Getopt is quite flexible but the obvious price must be paid:
  408. X     there is much it could do that it doesn't, like checking
  409. X     mutually exclusive options, checking type of option argu-
  410. X     ments, etc.
  411. X
  412. X
  413. X
  414. X
  415. SHAR_EOF
  416. echo "extracting HexToInt.man"
  417. sed 's/^X//' << \SHAR_EOF > HexToInt.man
  418. XHEXTOINT(3)                Library Functions               HEXTOINT(3)
  419. X
  420. X
  421. X
  422. XNAME
  423. X     hextoint - give the decimal value of a string of decimal digits
  424. X
  425. XSYNOPSIS
  426. X     #include <edlib.h>
  427. X
  428. X     int hextoint(number)
  429. X     char *number;
  430. X
  431. XDESCRIPTION
  432. X     Hextoint takes a string that may have been read in with scanf(3)
  433. X     or from the console, and treats it as if it were a hexadecimal
  434. X     number. The integer value of the hexadecimal number is returned.
  435. X     Hextoint stops at the first character that is not a hexadecimal
  436. X     digit. If the first character in the string is not a hexadecimal
  437. X     digit, then a value of 0 is returned.
  438. X
  439. XAUTHOR
  440. X     Edwin Hoogerbeets 01/08/88
  441. X
  442. XSEE ALSO
  443. X     bintoint(3), dectoint(3), toint(3)
  444. X
  445. X
  446. X
  447. SHAR_EOF
  448. echo "extracting IsBDigit.man"
  449. sed 's/^X//' << \SHAR_EOF > IsBDigit.man
  450. XISBDIGIT(3)                Library Functions               ISBDIGIT(3)
  451. X
  452. X
  453. X
  454. XNAME
  455. X     isbdigit - tell whether given character is a binary digit
  456. X
  457. XSYNOPSIS
  458. X     #include <edlib.h>
  459. X
  460. X     int isbdigit(c)
  461. X     char c;
  462. X
  463. XDESCRIPTION
  464. X     Isbdigit returns a 1 if the given characters is either a '1'
  465. X     or a '0'. Isbdigit returns a 0 for all other characters.
  466. X
  467. XAUTHOR
  468. X     Edwin Hoogerbeets 01/08/88
  469. X
  470. XSEE ALSO
  471. X     isdigit(3), isodigit(3), isxdigit(3)
  472. X
  473. X
  474. X
  475. SHAR_EOF
  476. echo "extracting IsCSym.man"
  477. sed 's/^X//' << \SHAR_EOF > IsCSym.man
  478. XISCSYM(3)                  Library Functions                 ISCSYM(3)
  479. X
  480. X
  481. X
  482. XNAME
  483. X     iscsym - tell whether given character could be found in a C
  484. X     symbol
  485. X
  486. XSYNOPSIS
  487. X     #include <edlib.h>
  488. X
  489. X     int iscsym(c)
  490. X     char c;
  491. X
  492. XDESCRIPTION
  493. X     Iscsym tells whether it is possible that the given character
  494. X     could appear in a C symbol. A C symbol might be the name of a
  495. X     variable, structure, reserved word or a function. Not all
  496. X     characters that are valid in a C symbol may be the first
  497. X     character of an identifier in most implementations of C. In
  498. X     most versions, the characters allowed after the first character
  499. X     are the upper and lower case alphabetic characters, the digits
  500. X     '0' to '9' and the underscore (_).
  501. X
  502. XAUTHOR
  503. X     Edwin Hoogerbeets 01/08/88
  504. X
  505. XSEE ALSO
  506. X     iscsymf(3)
  507. X
  508. XBUGS
  509. X     This function depends on the C compiler used, and thus the
  510. X     characters that are valid in a C symbol may be different, even
  511. X     on the same machine.
  512. X
  513. X
  514. X
  515. SHAR_EOF
  516. echo "extracting IsCSymF.man"
  517. sed 's/^X//' << \SHAR_EOF > IsCSymF.man
  518. XISCSYMF(3)                 Library Functions                ISCSYMF(3)
  519. X
  520. X
  521. X
  522. XNAME
  523. X     iscsymf - tell whether given character could be found as the
  524. X     first character of a C symbol
  525. X
  526. XSYNOPSIS
  527. X     #include <edlib.h>
  528. X
  529. X     int iscsymf(c)
  530. X     char c;
  531. X
  532. XDESCRIPTION
  533. X     Iscsymf tells whether it is possible that the given character
  534. X     could appear as the first character of a C symbol. A C symbol
  535. X     might be the the name of a variable, structure, reserved word
  536. X     or a functions. Not all characters that are valid in a C symbol
  537. X     may be the first character of an identifier in most implementations
  538. X     of C. In most versions, the characters allowed as the first
  539. X     character are the upper and lower case alphbetic characters and
  540. X     the underscore (_).
  541. X
  542. XAUTHOR
  543. X     Edwin Hoogerbeets 01/08/88
  544. X
  545. XSEE ALSO
  546. X     iscsym(3)
  547. X
  548. XBUGS
  549. X     This function depends on the C compiler used, and thus the
  550. X     characters that are valid as the intial character in a C symbol
  551. X     may be different, even on the same machine.
  552. X
  553. X
  554. X
  555. X
  556. SHAR_EOF
  557. echo "extracting IsDir.man"
  558. sed 's/^X//' << \SHAR_EOF > IsDir.man
  559. XISDIR(3)                   Library Functions                  ISDIR(3)
  560. X
  561. X
  562. X
  563. XNAME
  564. X     isdir - tell whether a given path name is a directory
  565. X
  566. XSYNOPSIS
  567. X     #include <edlib.h>
  568. X
  569. X     int isdir(path)
  570. X     char *path;
  571. X
  572. XDESCRIPTION
  573. X     Isdir is a boolean function that returns a 1 if the file
  574. X     referenced in path is the name of a directory. Currently,
  575. X     isdir is implemented as a macro using filetype(3).
  576. X
  577. XAUTHOR
  578. X     Edwin Hoogerbeets 01/08/88
  579. X
  580. XSEE ALSO
  581. X     filetype(3), isfile(3)
  582. X
  583. X
  584. X
  585. SHAR_EOF
  586. echo "extracting IsFile.man"
  587. sed 's/^X//' << \SHAR_EOF > IsFile.man
  588. XISFILE(3)                  Library Functions                 ISFILE(3)
  589. X
  590. X
  591. X
  592. XNAME
  593. X     isfile - tell whether a given path name is a plain file
  594. X
  595. XSYNOPSIS
  596. X     #include <edlib.h>
  597. X
  598. X     int isfile(path)
  599. X     char *path;
  600. X
  601. XDESCRIPTION
  602. X     Isfile is a boolean function that returns a 1 if the file
  603. X     referenced in path is the name of a plain file. Currently,
  604. X     isfile is implemented as a macro using filetype(3).
  605. X
  606. XAUTHOR
  607. X     Edwin Hoogerbeets 01/08/88
  608. X
  609. XSEE ALSO
  610. X     filetype(3), isdir(3)
  611. X
  612. X
  613. X
  614. SHAR_EOF
  615. echo "extracting IsODigit.man"
  616. sed 's/^X//' << \SHAR_EOF > IsODigit.man
  617. XISODIGIT(3)                Library Functions               ISODIGIT(3)
  618. X
  619. X
  620. X
  621. XNAME
  622. X     isodigit - tell whether given character is an octal digit
  623. X
  624. XSYNOPSIS
  625. X     #include <edlib.h>
  626. X
  627. X     int isodigit(c)
  628. X     char c;
  629. X
  630. XDESCRIPTION
  631. X     Isodigit returns a 1 if the given characters is an octal digit.
  632. X     Isodigit returns a 0 for all other characters.
  633. X
  634. XAUTHOR
  635. X     Edwin Hoogerbeets 01/08/88
  636. X
  637. XSEE ALSO
  638. X     isdigit(3), isbdigit(3), isxdigit(3)
  639. X
  640. X
  641. X
  642. SHAR_EOF
  643. echo "extracting ReadMe"
  644. sed 's/^X//' << \SHAR_EOF > ReadMe
  645. Xedlib v1.1 Copyright 1989 Edwin Hoogerbeets
  646. X
  647. XNotes:
  648. X
  649. X  This code is freely redistributable as long as no charge other than
  650. X  reasonable copying fees are levied for it.
  651. X
  652. X  Some time ago, I noticed a distinct lack of certain functions in the Manx
  653. X  C libraries. Undaunted, I wrote them. Since then, I have written some
  654. X  other routines, and included other people's routines. Here they are!
  655. X
  656. X  The function strtod returns a IEEE double. If you would like to use this
  657. X  routine, you must compile your code with the +fi flag to cc to use IEEE
  658. X  floats instead of ffp floats.
  659. X
  660. X  I would like to thank Daniel J. Barrett and Richard A. O'Keefe for some
  661. X  of these routines. Also, I would like to thank Rob Peck for the
  662. X  example in his book of how to get the current working directory.
  663. X
  664. XFiles:
  665. X
  666. X  The edlib distribution should contain the following files:
  667. X
  668. X ReadMe                    rwed    5278    7  21-Mar-89 02:28:15
  669. X barrett.doc               rwed    4188    9  23-Jun-88 20:38:16
  670. X basename.c                rwed     314    1  18-Mar-89 21:32:18
  671. X bintoint.c                rwed     507    1  10-Mar-89 13:30:46
  672. X chdir.c                   rwed     615    2  20-Mar-89 00:08:50
  673. X dectoint.c                rwed     524    2  10-Mar-89 13:30:50
  674. X ed.lib                    rwed   13164   26  21-Mar-89 02:22:51
  675. X ed32.lib                  rwed   13308   26  21-Mar-89 02:09:35
  676. X edlib.h                   rwed    2608    6  21-Mar-89 02:00:06
  677. X filetype.c                rwed     844    2  20-Mar-89 01:17:04
  678. X getcwd.c                  rwed    1800    4  19-Mar-89 20:56:38
  679. X getopt.c                  rwed    2158    5  10-Mar-89 13:30:56
  680. X hextoint.c                rwed     527    2  10-Mar-89 13:31:00
  681. X isbdigit.c                rwed     391    1  10-Mar-89 13:31:04
  682. X iscsym.c                  rwed     443    1  10-Mar-89 13:31:08
  683. X iscsymf.c                 rwed     454    1  10-Mar-89 13:31:10
  684. X isodigit.c                rwed     425    1  10-Mar-89 13:31:14
  685. X makefile                  rwed     811    2  21-Mar-89 02:24:50
  686. X man                       rwed   [dir]       25-Mar-89 16:27:29
  687. X stolower.c                rwed     442    1  10-Mar-89 13:31:18
  688. X stoupper.c                rwed     442    1  10-Mar-89 13:31:20
  689. X strcspn.c                 rwed     469    1  10-Mar-89 13:31:24
  690. X strdup.c                  rwed     434    1  20-Mar-89 02:03:10
  691. X stricmp.c                 rwed     531    2  10-Mar-89 13:31:26
  692. X strnicmp.c                rwed     573    2  10-Mar-89 13:31:32
  693. X strpbrk.c                 rwed     448    1  10-Mar-89 13:31:36
  694. X strpos.c                  rwed     632    2  10-Mar-89 13:31:40
  695. X strrpbrk.c                rwed     494    1  10-Mar-89 13:31:44
  696. X strrpos.c                 rwed     641    2  10-Mar-89 13:31:48
  697. X strspn.c                  rwed     460    1  10-Mar-89 13:31:52
  698. X strtod.c                  rwed    5055   10  20-Mar-89 02:09:04
  699. X strtok.c                  rwed     906    2  10-Mar-89 13:31:56
  700. X test.c                    rwed    2858    6  20-Mar-89 02:20:30
  701. X toint.c                   rwed     671    2  10-Mar-89 13:32:06
  702. Xdirectory of dh0:usr/local/src/edlib/1.1/man
  703. X BaseName                  rwed     803    2  24-Mar-89 16:02:20
  704. X BinToInt                  rwed     702    2  24-Mar-89 16:02:20
  705. X ChDir                     rwed     977    2  24-Mar-89 16:02:22
  706. X DecToInt                  rwed     708    2  24-Mar-89 16:02:22
  707. X FileType                  rwed     752    2  24-Mar-89 16:02:22
  708. X GetCWD                    rwed    1160    3  24-Mar-89 16:02:22
  709. X GetOpt                    rwed    3728    8  24-Mar-89 16:02:22
  710. X HexToInt                  rwed     724    2  24-Mar-89 16:02:22
  711. X IsBDigit                  rwed     447    1  24-Mar-89 16:02:24
  712. X IsCSym                    rwed     969    2  24-Mar-89 16:02:24
  713. X IsCSymF                   rwed    1020    2  24-Mar-89 16:02:24
  714. X IsDir                     rwed     486    1  24-Mar-89 16:02:24
  715. X IsFile                    rwed     491    1  24-Mar-89 16:02:24
  716. X IsODigit                  rwed     440    1  24-Mar-89 16:02:26
  717. X SToLower                  rwed     482    1  24-Mar-89 16:02:26
  718. X SToUpper                  rwed     481    1  24-Mar-89 16:02:26
  719. X StrCSPN                   rwed     866    2  24-Mar-89 16:02:26
  720. X StrDup                    rwed     576    2  24-Mar-89 16:02:28
  721. X StrICmp                   rwed     828    2  24-Mar-89 16:02:28
  722. X StrNICmp                  rwed     901    2  24-Mar-89 16:02:28
  723. X StrPBrk                   rwed     895    2  24-Mar-89 16:02:28
  724. X StrPos                    rwed     827    2  24-Mar-89 16:02:28
  725. X StrRPBrk                  rwed     958    2  24-Mar-89 16:02:28
  726. X StrRPos                   rwed     772    2  24-Mar-89 16:02:28
  727. X StrSPN                    rwed     899    2  24-Mar-89 16:02:30
  728. X StrToD                    rwed    1869    4  24-Mar-89 16:02:26
  729. X StrTok                    rwed    1605    4  24-Mar-89 16:02:30
  730. X ToInt                     rwed     622    2  24-Mar-89 16:02:30
  731. X257 Blocks, 89403 Bytes used in 62 files
  732. X
  733. XRevision History:
  734. X
  735. X1.1: March 1989
  736. X  - fixed a bug in strnicmp. Thanks to Richard Sexton for pointing this
  737. X    out and suggesting a fix
  738. X  - added basename, chdir, getcwd, filetype, isdir, isfile, strdup
  739. X    and strtod
  740. X  - added register declarations where possible
  741. X
  742. X1.0: August 3, 1988
  743. X  - initial compilation
  744. X
  745. X
  746. SHAR_EOF
  747. echo "extracting ReadMe.USENET"
  748. sed 's/^X//' << \SHAR_EOF > ReadMe.USENET
  749. XI moved everything from the 'man' subdirectory into this one, and added
  750. Xthe suffix ".man" to all the files.  When I'm satisfied with a 'sh' or
  751. X'unshar' program for the amiga that does directory creation, I'll stop
  752. Xflattening directories.
  753. X
  754. XI also uuencoded the two library files, ed.lib and ed32.lib, so everything
  755. Xcould go into the sources groups.
  756. X
  757. X..bob
  758. SHAR_EOF
  759. echo "extracting SToLower.man"
  760. sed 's/^X//' << \SHAR_EOF > SToLower.man
  761. XSTOLOWER(3)                Library Functions               STOLOWER(3)
  762. X
  763. X
  764. X
  765. XNAME
  766. X     stolower - convert a string to only lower case characters
  767. X
  768. XSYNOPSIS
  769. X     #include <edlib.h>
  770. X
  771. X     char *stolower(str)
  772. X     char *str;
  773. X
  774. XDESCRIPTION
  775. X     Stolower takes a pointer to a null terminated string and
  776. X     converts each upper case character into its lower case
  777. X     equivalent. All other characters are left untouched.
  778. X
  779. XAUTHOR
  780. X     Edwin Hoogerbeets 01/08/88
  781. X
  782. XSEE ALSO
  783. X     stoupper(3)
  784. X
  785. X
  786. X
  787. X
  788. SHAR_EOF
  789. echo "extracting SToUpper.man"
  790. sed 's/^X//' << \SHAR_EOF > SToUpper.man
  791. XSTOUPPER(3)                Library Functions               STOUPPER(3)
  792. X
  793. X
  794. X
  795. XNAME
  796. X     stoupper - convert a string to only upper case characters
  797. X
  798. XSYNOPSIS
  799. X     #include <edlib.h>
  800. X
  801. X     char *stoupper(str)
  802. X     char *str;
  803. X
  804. XDESCRIPTION
  805. X     Stoupper takes a pointer to a null terminated string and
  806. X     converts each lower case character into its upper case
  807. X     equivalent. All other characters are left untouched.
  808. X
  809. XAUTHOR
  810. X     Edwin Hoogerbeets 01/08/88
  811. X
  812. XSEE ALSO
  813. X     stolower(3)
  814. X
  815. X
  816. X
  817. SHAR_EOF
  818. echo "extracting StrCSPN.man"
  819. sed 's/^X//' << \SHAR_EOF > StrCSPN.man
  820. XSTRCSPN(3)                 Library Functions                STRCSPN(3)
  821. X
  822. X
  823. X
  824. XNAME
  825. X     strcspn - find the length of the longest intial segment of a
  826. X     string that consists of characters not from a certain set.
  827. X
  828. XSYNOPSIS
  829. X     #include <edlib.h>
  830. X
  831. X     int strcspn(str, charset)
  832. X     char *str, *charset;
  833. X
  834. XDESCRIPTION
  835. X     Strcspn searches the null terminated string 'str' for characters
  836. X     in the set 'charset'. The length of the longest intial string
  837. X     that consists of characters not from 'charset' is returned. If no
  838. X     characters of 'str' are also members of 'charset', then the
  839. X     length of 'str' is returned. If 'charset' is null then this
  840. X     will also cause the full length of 'str' to be returned.
  841. X
  842. X     This function is also known as instr.
  843. X
  844. XAUTHOR
  845. X     Daniel J. Barrett.
  846. X     barrett@cs.jhu.edu or ins_adjb@jhunix.UUCP
  847. X
  848. XSEE ALSO
  849. X     strspn(3)
  850. X
  851. X
  852. X
  853. SHAR_EOF
  854. echo "extracting StrDup.man"
  855. sed 's/^X//' << \SHAR_EOF > StrDup.man
  856. XSTRDUP(3)                  Library Functions                 STRDUP(3)
  857. X
  858. X
  859. X
  860. XNAME
  861. X     strdup - duplicate a given string
  862. X
  863. XSYNOPSIS
  864. X     #include <edlib.h>
  865. X
  866. X     char *strdup(str)
  867. X     char *str;
  868. X
  869. XDESCRIPTION
  870. X     Strdup allocates enough memory to hold the given string, and
  871. X     copies the string to the new space. It then returns a pointer
  872. X     to the new string.
  873. X
  874. XDIAGNOSTICS
  875. X     If there is not enough memory for a new string, then strdup
  876. X     returns a null and sets the external variable errno to ENOMEM.
  877. X
  878. XAUTHOR
  879. X     Edwin Hoogerbeets 20/03/89
  880. X
  881. XSEE ALSO
  882. X     strcmp(3)
  883. X
  884. X
  885. X
  886. SHAR_EOF
  887. echo "extracting StrICmp.man"
  888. sed 's/^X//' << \SHAR_EOF > StrICmp.man
  889. XSTRICMP(3)                 Library Functions                STRICMP(3)
  890. X
  891. X
  892. X
  893. XNAME
  894. X     stricmp - compare two strings with case insensitivity
  895. X
  896. XSYNOPSIS
  897. X     #include <edlib.h>
  898. X
  899. X     int stricmp(str1,str2)
  900. X     char *str1,*str2;
  901. X
  902. XDESCRIPTION
  903. X     Stricmp lexographically compares the two null terminated strings.
  904. X     It returns a number less than zero if the first differing
  905. X     character of str1 is less than that of str2, zero if the two
  906. X     strings are equal, and a number greater than zero if the
  907. X     first differing character in str1 is greater than the
  908. X     corresponding character of str2. Stricmp works like strcmp(3)
  909. X     except that all alphabetic characters are treated as lower case
  910. X     for the purposes of the comparison.
  911. X
  912. XAUTHOR
  913. X     Edwin Hoogerbeets 01/08/88
  914. X
  915. XSEE ALSO
  916. X     strcmp(3), strncmp(3), strnicmp(3)
  917. X
  918. X
  919. X
  920. SHAR_EOF
  921. echo "extracting StrNICmp.man"
  922. sed 's/^X//' << \SHAR_EOF > StrNICmp.man
  923. XSTRNICMP(3)                Library Functions               STRNICMP(3)
  924. X
  925. X
  926. X
  927. XNAME
  928. X     strnicmp - compare two strings with case insensitivity up to
  929. X     a certain length
  930. X
  931. XSYNOPSIS
  932. X     #include <edlib.h>
  933. X
  934. X     int strnicmp(str1,str2,len)
  935. X     char *str1,*str2;
  936. X     int len;
  937. X
  938. XDESCRIPTION
  939. X     Strnicmp lexographically compares the two null terminated
  940. X     strings up to the length 'len'. It returns a number less than
  941. X     zero if the first differing character of str1 is less than that
  942. X     of str2, zero if the two strings are equal, and a number greater
  943. X     than zero if the first differing character in str1 is greater
  944. X     than the corresponding character of str2. Strnicmp works like
  945. X     strncmp(3) except that all alphabetic characters are treated as
  946. X     lower case for the purposes of the comparison.
  947. X
  948. XAUTHOR
  949. X     Edwin Hoogerbeets 01/08/88
  950. X
  951. XSEE ALSO
  952. X     strcmp(3), strncmp(3), stricmp(3)
  953. X
  954. X
  955. X
  956. SHAR_EOF
  957. echo "extracting StrPBrk.man"
  958. sed 's/^X//' << \SHAR_EOF > StrPBrk.man
  959. XSTRPBRK(3)                 Library Functions                STRPBRK(3)
  960. X
  961. X
  962. X
  963. XNAME
  964. X     strpbrk - find the first occurance of a character of a set in
  965. X     a string
  966. X
  967. XSYNOPSIS
  968. X     #include <edlib.h>
  969. X
  970. X     char *strpbrk(str, charset)
  971. X     char *str, *charset;
  972. X
  973. XDESCRIPTION
  974. X     Strpbrk searches forwards through the null terminated string
  975. X     'str' for occurances of a character included in the character
  976. X     set 'charset'. The 'charset' variable is null terminated string
  977. X     that is treated as a character set. Therefore, repetition and
  978. X     order are ignored. Strpbrk returns a pointer to the first
  979. X     character of 'charset' that is found in 'str'.
  980. X
  981. XDIAGNOSTICS
  982. X     If no character in 'charset' is found in 'str', then a null
  983. X     pointer (NULL) is returned.
  984. X
  985. XAUTHOR
  986. X     Daniel J. Barrett.
  987. X     barrett@cs.jhu.edu or ins_adjb@jhunix.UUCP
  988. X
  989. XSEE ALSO
  990. X     strrpbrk(3), strcspn(3), strspn(3)
  991. X
  992. X
  993. X
  994. SHAR_EOF
  995. echo "extracting StrPos.man"
  996. sed 's/^X//' << \SHAR_EOF > StrPos.man
  997. XSTRPOS(3)                  Library Functions                 STRPOS(3)
  998. X
  999. X
  1000. X
  1001. XNAME
  1002. X     strpos - give the first position of a character withing a string
  1003. X
  1004. XSYNOPSIS
  1005. X     #include <edlib.h>
  1006. X
  1007. X     int strpos(string,key)
  1008. X     char *string;
  1009. X     char key;
  1010. X
  1011. XDESCRIPTION
  1012. X     Strpos searches the null terminated string 'string' for the
  1013. X     first occurance of the character 'key'. The position of this
  1014. X     character is returned. The terminating null character is
  1015. X     considered to be part of the string for the purposes of this
  1016. X     search. Thus, using strpos to find the null will give the
  1017. X     same result as a strlen(3).
  1018. X
  1019. X     Some implementations of C use a variant called scnstr.
  1020. X
  1021. XDIAGNOSTICS
  1022. X     Strpos returns a -1 if the character is not found in the string.
  1023. X
  1024. XAUTHOR
  1025. X     Edwin Hoogerbeets 01/08/88
  1026. X
  1027. XSEE ALSO
  1028. X     strrpos(3)
  1029. X
  1030. X
  1031. X
  1032. SHAR_EOF
  1033. echo "extracting StrRPBrk.man"
  1034. sed 's/^X//' << \SHAR_EOF > StrRPBrk.man
  1035. XSTRRPBRK(3)                Library Functions               STRRPBRK(3)
  1036. X
  1037. X
  1038. X
  1039. XNAME
  1040. X     strrpbrk - find the last occurance of a character of a set in
  1041. X     a string
  1042. X
  1043. XSYNOPSIS
  1044. X     #include <edlib.h>
  1045. X
  1046. X     char *strrpbrk(str, charset)
  1047. X     char *str, *charset;
  1048. X
  1049. XDESCRIPTION
  1050. X     Strrpbrk searches backwards through the null terminated string
  1051. X     'str' for occurances of a character included in the character
  1052. X     set 'charset'. The 'charset' variable is null terminated string
  1053. X     that is treated as a character set. Therefore, repetition and
  1054. X     order are ignored. Strrpbrk returns a pointer to the last
  1055. X     character of 'charset' that is found in 'str'.
  1056. X
  1057. XDIAGNOSTICS
  1058. X     If no character in 'charset' is found in 'str', then a null
  1059. X     pointer (NULL) is returned.
  1060. X
  1061. XAUTHOR
  1062. X     Edwin Hoogerbeets 01/08/88 modified from strpbrk(3) by:
  1063. X     Daniel J. Barrett.
  1064. X     barrett@cs.jhu.edu or ins_adjb@jhunix.UUCP
  1065. X
  1066. XSEE ALSO
  1067. X     strpbrk(3), strcspn(3), strspn(3)
  1068. X
  1069. X
  1070. X
  1071. SHAR_EOF
  1072. echo "extracting StrRPos.man"
  1073. sed 's/^X//' << \SHAR_EOF > StrRPos.man
  1074. XSTRRPOS(3)                 Library Functions                STRRPOS(3)
  1075. X
  1076. X
  1077. X
  1078. XNAME
  1079. X     strrpos - give the last position of a character withing a string
  1080. X
  1081. XSYNOPSIS
  1082. X     #include <edlib.h>
  1083. X
  1084. X     int strrpos(string,key)
  1085. X     char *string;
  1086. X     char key;
  1087. X
  1088. XDESCRIPTION
  1089. X     Strpos searches the null terminated string 'string' for the
  1090. X     last occurance of the character 'key'. The position of this
  1091. X     character is returned. The terminating null character is
  1092. X     considered to be part of the string for the purposes of this
  1093. X     search. Thus, using strrpos to find the null will give the
  1094. X     same result as a strlen(3).
  1095. X
  1096. XDIAGNOSTICS
  1097. X     Strrpos returns a -1 if the character is not found in the
  1098. X     string.
  1099. X
  1100. XAUTHOR
  1101. X     Edwin Hoogerbeets 01/08/88
  1102. X
  1103. XSEE ALSO
  1104. X     strpos(3)
  1105. X
  1106. X
  1107. X
  1108. SHAR_EOF
  1109. echo "extracting StrSPN.man"
  1110. sed 's/^X//' << \SHAR_EOF > StrSPN.man
  1111. XSTRSPN(3)                  Library Functions                 STRSPN(3)
  1112. X
  1113. X
  1114. X
  1115. XNAME
  1116. X     strspn - find the length of the longest intial segment
  1117. X     of a string that consists of characters from a certain set.
  1118. X
  1119. XSYNOPSIS
  1120. X     #include <edlib.h>
  1121. X
  1122. X     int strspn(str, charset)
  1123. X     char *str, *charset;
  1124. X
  1125. XDESCRIPTION
  1126. X     Strspn searches the null terminated string 'str' for characters
  1127. X     in the set 'charset'. The length of the longest intial string
  1128. X     that consists of characters from 'charset' is returned. If all
  1129. X     characters of 'str' are also members of 'charset', then the
  1130. X     length of 'str' is returned. If 'charset' is null then this
  1131. X     function will return a zero as none of the characters in 'str'
  1132. X     could possibly be in the set.
  1133. X
  1134. X     This function is also known as notstr.
  1135. X
  1136. XAUTHOR
  1137. X     Daniel J. Barrett.
  1138. X     barrett@cs.jhu.edu or ins_adjb@jhunix.UUCP
  1139. X
  1140. XSEE ALSO
  1141. X     strcspn(3)
  1142. X
  1143. X
  1144. X
  1145. SHAR_EOF
  1146. echo "extracting StrToD.man"
  1147. sed 's/^X//' << \SHAR_EOF > StrToD.man
  1148. XSTRTOD(3)                  Library Functions                 STRTOD(3)
  1149. X
  1150. X
  1151. X
  1152. XNAME
  1153. X     strtod - convert a string to a double precision floating point
  1154. X     number
  1155. X
  1156. XSYNOPSIS
  1157. X     #include <edlib.h>
  1158. X
  1159. X     double strtod(str,ptr)
  1160. X     char *str;
  1161. X     char **ptr;
  1162. X
  1163. XDESCRIPTION
  1164. X     Strtod converts the character string str to a double precision
  1165. X     floating point number and returns this value.  Strtod recognises
  1166. X     the following in a string representing a valid double:
  1167. X
  1168. X        <space>... [+|-] <digit>... [. <digit>...] [<exponent>]
  1169. X
  1170. X     where <exponent> is
  1171. X
  1172. X        e|E [+|-| ] <digit> <digit>...
  1173. X
  1174. X     If ptr is not (char**)NULL, *ptr is assigned a pointer to the
  1175. X     character just after the last character accepted by strtod.
  1176. X     This will typically be a layout character or NUL.
  1177. X
  1178. X     If there are not any digits at the beginning of the string,
  1179. X     (e.g. the input is "e45" or "Fred" or "-gotcha-") strtod will
  1180. X     make *ptr point to the whole of str (even if there were leading
  1181. X     spaces and signs) and will return 0.0.
  1182. X
  1183. X     If there is some problem with the exponent (e.g. the input is
  1184. X     "1.2e%45") strtod will reject all of the exponent, making *ptr
  1185. X     point to the 'e', and will convert only the preceding characters.
  1186. X
  1187. X     A single space after the 'e' or 'E' of an exponent is accepted as
  1188. X     if it were a '+' sign, because some output formatting routines
  1189. X     generate numbers in this form.  Spaces are not otherwise accepted
  1190. X     inside numbers.
  1191. X
  1192. X     If the correct value cannot be represented, strtod sets the
  1193. X     external variable errno to ERANGE, and returns +/-HUGE for
  1194. X     overflow, +/-ZERO for underflow.
  1195. X
  1196. XWARNING
  1197. X     Strtod returns a IEEE double. If you would like to use this routine,
  1198. X     you must compile your code with the +fi flag to cc to use IEEE floats
  1199. X     instead of ffp floats.
  1200. X
  1201. XAUTHOR
  1202. X     Richard A. O'Keefe, 11/03/89
  1203. X
  1204. X
  1205. X
  1206. SHAR_EOF
  1207. echo "extracting StrTok.man"
  1208. sed 's/^X//' << \SHAR_EOF > StrTok.man
  1209. XSTRTOK(3)                  Library Functions                 STRTOK(3)
  1210. X
  1211. X
  1212. X
  1213. XNAME
  1214. X     strtok - search a string for tokens delimited by characters
  1215. X     from a set
  1216. X
  1217. XSYNOPSIS
  1218. X     #include <edlib.h>
  1219. X
  1220. X     char *strtok(buf, separators)
  1221. X     char *buf, *separators;
  1222. X
  1223. XDESCRIPTION
  1224. X     Strtok searches the null terminated string 'buf' for tokens
  1225. X     delimited by characters from the character set 'separators'.
  1226. X     The null terminated string 'separators' is treated as a set.
  1227. X     Thus, repetition and order are ignored. Strtok replaces the
  1228. X     separator character with a null byte and returns a pointer to
  1229. X     the beginning of the token, effectively singling out the first
  1230. X     token. Subsequent calls to strtok with the parameter 'buf' set
  1231. X     to NULL returns the next token after the previous one using the
  1232. X     same string as previous invocations. The character set
  1233. X     'separators' may be different at each invocation.
  1234. X
  1235. XDIAGNOSTICS
  1236. X     If no token is found, a NULL pointer is returned.
  1237. X
  1238. XEXAMPLE
  1239. X     Here is an example program demonstrating strtok(3).
  1240. X
  1241. X     #include <stdio.h>
  1242. X
  1243. X     extern char *strtok();
  1244. X     char tokesep[] = " \n\t\rx";
  1245. X
  1246. X     main()
  1247. X     {
  1248. X             char buf[BUFSIZ], *tokep;
  1249. X
  1250. X             while (fgets(buf, sizeof(buf), stdin)) {
  1251. X                     tokep = strtok(buf, tokesep);
  1252. X                     do {
  1253. X                             printf("Token is %s\n", tokep);
  1254. X                             tokep = strtok((char *)NULL, tokesep);
  1255. X                     }while (tokep);
  1256. X             }
  1257. X     }
  1258. X
  1259. XAUTHOR
  1260. X     Daniel J. Barrett.
  1261. X     barrett@cs.jhu.edu or ins_adjb@jhunix.UUCP
  1262. X
  1263. X
  1264. X
  1265. SHAR_EOF
  1266. echo "extracting ToInt.man"
  1267. sed 's/^X//' << \SHAR_EOF > ToInt.man
  1268. XTOINT(3)                   Library Functions                  TOINT(3)
  1269. X
  1270. X
  1271. X
  1272. XNAME
  1273. X     toint - return the integer value of a character digit
  1274. X
  1275. XSYNOPSIS
  1276. X     #include <edlib.h>
  1277. X
  1278. X     int toint(c)
  1279. X     char c;
  1280. X
  1281. XDESCRIPTION
  1282. X     Toint treats the character 'c' as a hexadecimal character and
  1283. X     returns its integer equivalent. Note that this routine may be
  1284. X     used for decimal, octal and binary digits, as these are proper
  1285. X     subsets of the hexadecimal character set.
  1286. X
  1287. XDIAGNOSTICS
  1288. X     If the given character does not represent a hexadecimal digit a
  1289. X     value of -1 is returned.
  1290. X
  1291. XAUTHOR
  1292. X     Edwin Hoogerbeets 01/08/88
  1293. X
  1294. X
  1295. X
  1296. X
  1297. SHAR_EOF
  1298. echo "extracting barrett.doc"
  1299. sed 's/^X//' << \SHAR_EOF > barrett.doc
  1300. X****************************************************************************
  1301. X* STRING FUNCTIONS by Daniel J. Barrett.                                   *
  1302. X*               barrett@cs.jhu.edu, ins_adjb@jhunix.UUCP             *
  1303. X*                                                                          *
  1304. X* THESE ROUTINES ARE IN THE PUBLIC DOMAIN.                                 *
  1305. X****************************************************************************
  1306. X
  1307. X    Manx `C' provides most of the standard "UNIX" string functions, such
  1308. Xas strcat(), strcmp(), and so on.
  1309. X
  1310. X    Four of the functions that Manx does NOT provide are strspn(), 
  1311. Xstrcspn(), strpbrk(), and strtok().  Here are my versions of these 4 missing 
  1312. Xfunctions, written from scratch.  I wrote several versions, and these were 
  1313. Xthe fastest.  (Undoubtedly, assembler would be faster, but I don't know
  1314. Xassembler.  Feel free to "one-up" me.  :-))
  1315. X
  1316. X    Note that some of these functions call built-in Manx functions like
  1317. Xindex() and strchr().  These versions are FASTER than when I did everything 
  1318. X"by hand".
  1319. X
  1320. X    I don't own Lattice `C', but I suppose these routines will work
  1321. Xif you have the functions index() and strchr()... they would be easy to
  1322. Xwrite, anyway.
  1323. X
  1324. XHere are brief descriptions of the 4 functions.
  1325. X
  1326. Xint strspn(string, character_set)
  1327. Xchar *string, *character_set;
  1328. X
  1329. X    Starting from the beginning of string "string", count how
  1330. X    many of its characters are found in "character_set".  When
  1331. X    you hit the first character NOT in "character_set", RETURN
  1332. X    the number of characters found so far.  If either argument
  1333. X    is NULL, strspn() returns 0.
  1334. X
  1335. X    strspn("abcdefg", "abd")    returns 2.
  1336. X    strspn("abcdefg", "xyyz")    returns 0.
  1337. X    strspn("abcdefg", "dbc")    returns 0.
  1338. X    strspn("abcdefg", "dxbgac")    returns 4.
  1339. X
  1340. Xint strcspn(string, character_set)
  1341. Xchar *string, *character_set;
  1342. X
  1343. X    This function is exactly the opposite of strspn().  Return the
  1344. X    number of characters, starting from the beginning of the string,
  1345. X    that are NOT found in "character_set".  Keep counting until you
  1346. X    hit the first character in "string" that IS found in "character_set";
  1347. X    then RETURN.  If either argument is NULL, strcspn() returns 0.
  1348. X
  1349. X    strcspn("abcdefg", "abd")    returns 0.
  1350. X    strcspn("abcdefg", "xyyz")    returns 7.
  1351. X    strspn("abcdefg", "dbc")    returns 1.
  1352. X    strspn("abcdefg", "dxbgac")    returns 0.
  1353. X
  1354. Xchar *strpbrk(string, character_set)
  1355. Xchar *string, *character_set;
  1356. X
  1357. X    Return a pointer to the first character in "string" that
  1358. X    appears in "character_set".  If either argument is NULL,
  1359. X    strpbrk() returns NULL.
  1360. X
  1361. X    strcspn("abcdefg", "abd")    returns "abcdefg".
  1362. X    strcspn("abcdefg", "xyyz")    returns NULL.
  1363. X    strspn("abcdefg", "dbc")    returns "bcdefg".
  1364. X    strspn("abcdefg", "dxbgac")    returns "abcdefg".
  1365. X
  1366. Xchar *strtok(string, character_set)
  1367. Xchar *string, *character_set;
  1368. X
  1369. X    This is a VERY USEFUL function.  The UNIX manual explains it best:
  1370. X
  1371. X    `The strtok subroutine considers the string "string" to consist of
  1372. X    a sequence of zero or more text tokens separated by spans of
  1373. X    one or more characters from the separator string "character_set".  
  1374. X    The first call (with pointer "string" specified) returns a pointer
  1375. X    to the first character of the first token, and will have written
  1376. X    a null character into "string" immediately following the
  1377. X    returned token.  The function keeps track of its position in
  1378. X    the string between separate calls, so that subsequent calls
  1379. X    (which must be made with the first argument a NULL pointer)
  1380. X    will work through the string "string" immediately following that
  1381. X    token.  In this way, subsequent calls will work through the
  1382. X    string "string" until no tokens remain.  The separator string 
  1383. X    "character_set" may be different from call to call.  When no token
  1384. X    remains in "string", a NULL pointer is returned.'
  1385. X
  1386. XHere is an example program demonstrating strtok().
  1387. X
  1388. X/******************************************************************/
  1389. X#include <stdio.h>
  1390. X
  1391. Xextern char *strtok();
  1392. Xchar tokesep[] = " \n\t\rx";
  1393. X    
  1394. Xmain()
  1395. X{
  1396. X    char buf[BUFSIZ], *tokep;
  1397. X
  1398. X    while (fgets(buf, sizeof(buf), stdin)) {
  1399. X        tokep = strtok(buf, tokesep);
  1400. X        do {
  1401. X            printf("Token is %s\n", tokep);
  1402. X            tokep = strtok((char *)NULL, tokesep);
  1403. X        }while (tokep);
  1404. X    }
  1405. X}
  1406. X
  1407. X/******************************************************************/
  1408. SHAR_EOF
  1409. echo "extracting basename.c"
  1410. sed 's/^X//' << \SHAR_EOF > basename.c
  1411. X/*
  1412. X * edlib v1.1 Copyright 1989 Edwin Hoogerbeets
  1413. X * This code is freely redistributable as long as no charge other than
  1414. X * reasonable copying fees are levied for it.
  1415. X */
  1416. X#include "edlib.h"
  1417. X
  1418. Xchar *basename(buf)
  1419. Xregister char *buf;
  1420. X{
  1421. X  register char *foo = strrpbrk(buf,":/");
  1422. X
  1423. X  return( foo ? (foo + 1) : buf );
  1424. X}
  1425. SHAR_EOF
  1426. echo "extracting bintoint.c"
  1427. sed 's/^X//' << \SHAR_EOF > bintoint.c
  1428. X/*
  1429. X * edlib v1.1 Copyright 1989 Edwin Hoogerbeets
  1430. X * This code is freely redistributable as long as no charge other than
  1431. X * reasonable copying fees are levied for it.
  1432. X */
  1433. X
  1434. X/* this function takes a string of binary digits and returns its value */
  1435. Xint bintoint(number)
  1436. Xregister char *number;
  1437. X{
  1438. X    register int value = 0;
  1439. X
  1440. X    while ( *number )
  1441. X        if ( isbdigit(*number) ) {
  1442. X            value = (value << 1) + toint(*number++);
  1443. X        } else {
  1444. X            return(value);
  1445. X        }
  1446. X
  1447. X    return(value);
  1448. X}
  1449. SHAR_EOF
  1450. echo "extracting chdir.c"
  1451. sed 's/^X//' << \SHAR_EOF > chdir.c
  1452. X/*
  1453. X * edlib v1.1 Copyright 1989 Edwin Hoogerbeets
  1454. X * This code is freely redistributable as long as no charge other than
  1455. X * reasonable copying fees are levied for it.
  1456. X */
  1457. X#include "edlib.h"
  1458. X#include <libraries/dos.h>
  1459. X#include <errno.h>
  1460. X
  1461. Xextern struct FileLock *Lock();
  1462. Xextern struct FileLock *CurrentDir();
  1463. X
  1464. Xint chdir(path)
  1465. Xchar *path;
  1466. X{
  1467. X  struct FileLock *lock;
  1468. X
  1469. X  if ( !path ) {
  1470. X    errno = EFAULT;
  1471. X    return(-1);
  1472. X  }
  1473. X
  1474. X  if ( !isdir(path) ) {
  1475. X    errno = ENOENT;
  1476. X    return(-1);
  1477. X  }
  1478. X
  1479. X  if ( !(lock = Lock(path,ACCESS_READ)) ) {
  1480. X    errno = EACCES;
  1481. X    return(-1);
  1482. X  }
  1483. X
  1484. X  lock = CurrentDir(lock);
  1485. X
  1486. X  return(0);
  1487. X}
  1488. SHAR_EOF
  1489. echo "extracting dectoint.c"
  1490. sed 's/^X//' << \SHAR_EOF > dectoint.c
  1491. X/*
  1492. X * edlib v1.1 Copyright 1989 Edwin Hoogerbeets
  1493. X * This code is freely redistributable as long as no charge other than
  1494. X * reasonable copying fees are levied for it.
  1495. X */
  1496. X
  1497. X/* this function takes a string of decimal digits and returns its value */
  1498. X#include <ctype.h>
  1499. X
  1500. Xint dectoint(number)
  1501. Xregister char *number;
  1502. X{
  1503. X    register int value = 0;
  1504. X
  1505. X    while ( *number )
  1506. X        if ( isdigit(*number) ) {
  1507. X            value = value*10  + toint(*number++);
  1508. X        } else {
  1509. X            return(value);
  1510. X        }
  1511. X
  1512. X    return(value);
  1513. X}
  1514. SHAR_EOF
  1515. echo "extracting ed.lib.uu"
  1516. sed 's/^X//' << \SHAR_EOF > ed.lib.uu
  1517. X
  1518. Xbegin 644 ed.lib
  1519. XM86H````"7V)I;G1O:6YT`$$"7V1E8W1O:6YT`(("7V]P=&5R<@""`E]O<'1IM
  1520. XM;F0`@@)?;W!T;W!T`(("7V]P=&%R9P""`E]G971O<'0`QP-?:&5X=&]I;G0`=
  1521. XM"`1?:7-B9&EG:70`2@1?:7-C<WEM`'\$7VES8W-Y;68`K`1?:7-O9&EG:70`*
  1522. XMW`1?<W1O;&]W97(`#@5?<W1O=7!P97(`0`5?<W1R8W-P;@!V!5]S=')P8G)K%
  1523. XM`+$%7W-T<G!O<P#L!5]S=')R<&]S`"D&7W-T<G-P;@!?!E]S=')T;VL`L09?F
  1524. XM=&]I;G0`Y`9?8F%S96YA;64`0P=?<W1R:6-M<`"8!U]S=')N:6-M<`#R!U]S7
  1525. XM=')R<&)R:P`W"%]S=')T;V0`Q@E?<W1R9'5P``P*7V=E=&-W9`!\"U]C:&1I&
  1526. XM<@`!#%]F:6QE='EP90```````````````````````````````````````````
  1527. XM`````````````````````````````````````````````````````````````
  1528. XM`````````````````````````````````````````````````````````````
  1529. XM`````````````````````````````````````````````````````````````
  1530. XM`````````````````````````````````````````````````````````````
  1531. XM`````````````````````````````````````````````````````````````
  1532. XM`````````````````````````````````````````````````````````````
  1533. XM`````````````````````````````````````````````````````````````
  1534. XM`````````````````````````````````````````````````````````````
  1535. XM`````````````````````````````````````````````````````````````
  1536. XM`````````````````````````````````````````````````````````````
  1537. XM`````````````````````````````````````````````````````````````
  1538. XM`````````````````````````````````````````````````````````````
  1539. XM`````````````````````````````````````````````````````````````
  1540. XM`````````````````````````````````````````````````````````````
  1541. XM`````````````````````````````````````````````````````````````
  1542. XM`````````````````````````````````````````````````````````````
  1543. XM`````````````````````````````````````````````````````````````
  1544. XM`````````````````````````````````````````````````````````````
  1545. XM`````````````````````````````````````````````````````````````
  1546. XM`````````````````````````````````````````````````````````````
  1547. XM`````````````````````````````````````````````````````````````
  1548. XM`````````````````````````````````````````````````````````````
  1549. XM`````````````````````````````````````````````````````````````
  1550. XM`````````````````````````````````````````````````````````````
  1551. XM`````````````````````````````````````````````````````````````
  1552. XM`````````````````````````````````````````````````````````````
  1553. XM`````````````````````````````````````````````````````````````
  1554. XM`````````````````````````````````````````````````````````````
  1555. XM`````````````````````````````````````````````````````````````
  1556. XM`````````````````````````````````````````````````````````````
  1557. XM`````````````````````````````````````````````````````````````
  1558. XM`````````````````````````````````````````````````````````````
  1559. XM`````````````````````````````````````````````````````````````
  1560. XM`````````````````````````````````````````````````````````````
  1561. XM`````````````````````````````````````````````````````````````
  1562. XM`````````````````````````````````````````````````````````````
  1563. XM`````````````````````````````````````````````````````````````
  1564. XM``````````````````````````````!!2F)I;G1O:6YT````3```````````^
  1565. XM``0``0`7``D`%@!!P``""```7V)I;G1O:6YT``<(``!?:7-B9&EG:70`!P@`8
  1566. XM`%]T;VEN=``'"```+F)E9VEN`````H``3`QB:6YT;VEN="YC`!4,X(8-``C_\
  1567. XM`0``'4Y5``!(YP@@)&T`"'@`!'9A;'5E``)I!6YU;6)E<@`&(V/_____$TH2Z
  1568. XM9S;_%Q`22(`_`$ZZ^G$`%51/2D!G&O\;($I2BA`02(`_`$ZZ^G(`&51/,@3CB
  1569. XM03@`V$'_$6`*_QDP!$S?!!!.74YU_Q%@QO__$S`$8/+_#0`5`?__"``">VD(H
  1570. XM``%[:0@``'MI]0```$%*9&5C=&]I;G0```!0````````````!``!`!8`"0`5T
  1571. XM`$'```((``!?9&5C=&]I;G0`!PH``%]C='!?``<(``!?=&]I;G0`!P@``"YB5
  1572. XM96=I;@````*``%`,9&5C=&]I;G0N8P`5#."+#0`*_P$``!U.50``2.<(("1MW
  1573. XM``AX``1V86QU90`":05N=6UB97(`!B-C_____Q-*$F<Z_Q<0$DB`4D!!^OIQJ
  1574. XM`!<(,``"``!G'/\;($I2BA`02(`_`$ZZ^G(`&U1/,@3#_``*.`#80?\18`K_6
  1575. XM&3`$3-\$$$Y=3G7_$6#"__\3,`1@\O\-`!<!__\(``)[:0@``'MI"``!6S!CV
  1576. XM]0``04IG971O<'0``````LX````&```````*``4`+``)`"<!1<```PH``%]OU
  1577. XM<'1E<G(``PH``E]O<'1I;F0`!PH``E]O<'1O<'0`!PH`!%]O<'1A<F<``@@`,
  1578. XM`%]G971O<'0`!P@``%]S=')C;7``!P@``%]S=')C:'(`!P@``%]S=')L96X`#
  1579. XM!P@``%]W<FET90`'"```+F)E9VEN`````H`"7`.```0"@`)<`H`!%`*``?SUM
  1580. XM$0`!]/41``'T#&=E=&]P="YC`!4,X)`-`!K_`0``&TY5__Y(YPP@."T`"/41R
  1581. XM``'T!&-P``8C8P1C``-I!G-P```!:05A<F=C``)I`V%R9W8```HC(V,#;W!T'
  1582. XM<P``#B-C_________Q,,;0`!T`1A`!%F:/\1,"W0`G$`$[!$;0K_&7#_3-\$%
  1583. XM,$Y=3G7__Q$P+=`"<0`?2,#E@"!M``HB<`@`#!$`+1%G&O\1,"W0`G$`$5)MF
  1584. XMT`)Q`!M(P.6`(&T`"BMP"`#0A',`_Q-P`&#(__\12'KZ(6(`,!$P+=`"<0`="
  1585. XM2,#E@"!M``HO,`@`3KKZ=0`54$]*0&8(_Q%2;=`"<0#_$W#_8*+___\1,"W0>
  1586. XM`G$`'4C`Y8`@;0`*(C`(`#`MT`)A`!U(P"!`$#`8`$B`.@`[0-""<@#_';I\N
  1587. XM`#IG%#\%+RT`#DZZ^G8`&5Q/)$!*@&8``([_$4IMT`)P`!%G5`$``P)E<G)B'
  1588. XM=68`__Y;,&,?&T7__AM\``K__R!M``HO$!%.NOIW`!]83S\`(&T`"B\0/SP`7
  1589. XM`DZZ^G@`$U!/2'KZ(6(`6($13KKZ=P`56$\_`$AZ^B%B`#,5/SP``DZZ^G@`)
  1590. XM'U!//SP``DAM__X_/``"3KKZ>``14$__$3`MT`)Q`!U(P.6`(&T`"B(P"`!21
  1591. XM;=`"80`1,"W0`F$`&4C`($!*,!@`9@K_$5)MT`)Q`/\3.WP``="$80#__Q5P8
  1592. XM/V``_MK__QE2B@P2`#IF``#8_Q$P+=`"<0`=2,#E@"!M``HB,`@`,"W0`F$`[
  1593. XM&U)`2,`@0$HP&`!G)O\1,"W0`G$`$5)MT`)Q`!E(P.6`(&T`"C(MT`)A`!M23
  1594. XM04C!(G`(`-/!*TG0@G,`$V```(K_$5)MT`)Q`!$P+=`"<0`3L$1M9O\12FW0B
  1595. XM`G``$6=4`0`$`F5R<F)U9@#__ELP8Q\;1?_^&WP`"O__(&T`"B\0$4ZZ^G<`Q
  1596. XM'UA//P`@;0`*+Q`_/``"3KKZ>``34$](>OHA8@!?A!%.NOIW`!583S\`2'KZG
  1597. XM(6(`78(5/SP``DZZ^G@`'U!//SP``DAM__X_/``"3KKZ>``14$__$SM\``'0<
  1598. XMA&$`_Q5P/V``_AC__Q$P+=`"<0`14FW0`G$`&TC`Y8`@;0`**W`(`-"$<P#_H
  1599. XM$SM\``'0A&$`_Q%@,/\1,"W0`G$`'4C`Y8`@;0`*(C`(`%)MT`)A`!$P+=`"]
  1600. XM80`92,`@0$HP&`!F"O\3.WP``="$80#_$5)MT`)Q`/__$4*MT`)S`/__%3`%`
  1601. XM8`#]Q/\?+2T`.B!I;&QE9V%L(&]P=!]I;VX@+2T@`#H@:6QL96=A'VP@;W!T%
  1602. XM:6]N("TM(``Z(&\?<'1I;VX@<F5Q=6ER97,@81]N(&%R9W5M96YT("TM(``ZG
  1603. XM'R!O<'1I;VX@<F5Q=6ER97,?(&%N(&%R9W5M96YT("TM(!$```T`2@'__P@`"
  1604. XM"'MI"``'>VD(``1[:0@``R-C"``":0@``6D(``!I"``&>R-C"``%>VGU`$%*V
  1605. XM:&5X=&]I;G0```!.````````````!``!`!8`"0`5`$'```((``!?:&5X=&]IU
  1606. XM;G0`!PH``%]C='!?``<(``!?=&]I;G0`!P@``"YB96=I;@````*``$X,:&5XW
  1607. XM=&]I;G0N8P`5#."4#0`*_P$``!U.50``2.<(("1M``AX``1V86QU90`":05N2
  1608. XM=6UB97(`!B-C_____Q-*$F<X_Q<0$DB`4D!!^OIQ`!<(,``#``!G&O\;($I22
  1609. XMBA`02(`_`$ZZ^G(`&51/,@3I03@`V$'_$6`*_QDP!$S?!!!.74YU_Q%@Q/__W
  1610. XM$S`$8/+_#0`7`?__"``">VD(``![:0@``5LP8_4`````04II<V)D:6=I=```;
  1611. XM`"(````````````"``$`$0`)`!``0L```@@``%]I<V)D:6=I=``'"```+F)E-
  1612. XM9VEN``````*``"(,:7-B9&EG:70N8P`5#."9#0`,_P$``!E.50``+P08+0`)^
  1613. XM!6,``F/__QNX/``Q9P:X/``P9@C_%W`!*!].74YU__\3<`!@]O__#0`4`?__[
  1614. XM"```>VD*``L``0`(`!8!7V)P````(V,!7V)E;F0```0C8P%?8G5F9@``""-CL
  1615. XM`5]F;&%G<P``#&,!7W5N:70```UC`5]B>71B=68```YC`5]B=69L96X``!!I>
  1616. XM`5]T;7!N86UE```2(V,)1DE,10`Z``'U````04II<V-S>6T``````#H`````@
  1617. XM```````$``$`%@`)`!4`-<```@@``%]I<V-S>6T`!P@``%]I<V-S>6UF``<*L
  1618. XM``!?8W1P7P`'"```+F)E9VEN`````H``.@QI<V-S>6TN8P`5#."<#0`._P$`P
  1619. XM`!E.50``+P08+0`)!6,``F/__Q<0!$B`/P!.NOIQ`!U43TI`9A(0!$B`4D!!>
  1620. XM^OIR`!<(,``"``!G"O\9$`1(@"@?3EU.=?__$W``8/;_#0`6`?__"``!>VD(^
  1621. XM``![:0@``ELP8_4```!!2FES8W-Y;68`````,`````````````,``0`3``D`J
  1622. XM$@`MP``""```7VES8W-Y;68`!PH``%]C='!?``<(```N8F5G:6X````"@``PP
  1623. XM#&ES8W-Y;68N8P`5#."?#0`-_P$``!E.50``+P08+0`)!6,``F/__Q<0!$B`0
  1624. XM4D!!^OIQ`!\2,```PCP``V8&N#P`7V8$&W`!8`)P`"@?3EU.=?\-`!$!__\(Z
  1625. XM``![:0@``5LP8_4```!!2FES;V1I9VET````-@````````````,``0`3``D`-
  1626. XM$@`PP``""```7VES;V1I9VET``<*``!?8W1P7P`'"```+F)E9VEN```"@``V7
  1627. XM#&ES;V1I9VET+F,`%0S@H@T`#?\!```93E4``"\$&"T`"05C``)C__\;N#P`-
  1628. XM.6<&N#P`.&8(_Q=P`"@?3EU.=?__%Q`$2(!20$'Z^G$`'3(`$#`0`$B`P'P`'
  1629. XM!&#B__\-`!8!__\(``![:0@``5LP8_4```!!2G-T;VQO=V5R````+@``````V
  1630. XM``````,``0`4``D`$P`RP``""```7W-T;VQO=V5R``<(``!?=&]L;W=E<@`'/
  1631. XM"```+F)E9VEN`````H``+@QS=&]L;W=E<BYC`!4,X*8-``W_`0``'4Y5``!(0
  1632. XMYP`P)&T`""9*!'1E;7``!R-C!7-T<@`&(V/_____$6`0_Q<0$TB`/P!.NOIQ!
  1633. XM`!E43Q:`4HM*$V;L__\9(`I,WPP`3EU.=?\-`!8!__\(``%[:0@``'LC8_4`0
  1634. XM`$%*<W1O=7!P97(````N`````````````P`!`!0`"0`3`#+```((``!?<W1O@
  1635. XM=7!P97(`!P@``%]T;W5P<&5R``<(```N8F5G:6X````"@``N#'-T;W5P<&5RI
  1636. XM+F,`%0S@J0T`#?\!```=3E4``$CG`#`D;0`()DH$=&5M<``'(V,%<W1R``8C+
  1637. XM8_____\18!#_%Q`32(`_`$ZZ^G$`&51/%H!2BTH39NS__QD@"DS?#`!.74YU7
  1638. XM_PT`%@'__P@``7MI"```>R-C]0``04IS=')C<W!N`````#8````````````#=
  1639. XM``$`$P`)`!(`-L```@@``%]S=')C<W!N``<(``!?<W1R8VAR``<(```N8F5G*
  1640. XM:6X``H``-@QS=')C<W!N+F,`%0S@K`T`"_\!```?3E4``$CG"#`D;0`()FT`3
  1641. XM#!$H"@1T96UP``(C8P5S='(`!B-C!6-H87)S970`!R-C_____QL@1!`02(`_9
  1642. XM`"\+3KKZ<0`57$]*0&8$_Q-2A&#H__\;(`20BDS?#!!.74YU_PT`%0'__P@`%
  1643. XM`7MI"```>VGU````04IS=')P8G)K`````$0````````````#``$`$P`)`!(`/
  1644. XM.\```@@``%]S=')P8G)K``<(``!?:6YD97@`!P@``"YB96=I;@```H``1`QSY
  1645. XM=')P8G)K+F,`%0S@N0T`"?\!```?3E4``$CG"#`D;0`()FT`#`1T96UP``(CV
  1646. XM8P5S='(`!B-C!6-H87)S970`!R-C______\1*`K__Q\@1$H09Q@@1!`02(`_L
  1647. XM`"\+$4ZZ^G$`%5Q/2H!F!/\34H1@XO__'R!$2A!G!"`$8`)P`$S?#!`33EU.K
  1648. XM=?\-`!4!__\(``%[(V,(``![(V/U``!!2G-T<G!O<P``````0```````````3
  1649. XM``,``0`3``D`$@`[P``""```7W-T<G!O<P`'"```7W-T<FQE;@`'"```+F)E+
  1650. XM9VEN```"@`!`#'-T<G!O<RYC`!4,X+P-``W_`0``'TY5``!(YPP@)&T`"!@M:
  1651. XM``T1>@`$8V]U;G1E<@`#:05S=')I;F<`!B-C!6ME>0`"8_______$TH$9A#_T
  1652. XM$R\*3KKZ<0`96$],WP0P3EU.=?__%4HR4`!G$/\7$#)0`+`$9@3_$S`%8.;_T
  1653. XM$5)%_Q%@ZO\3</]@WO\-`!P!__\(``%[:0@``'MI]0```$%*<W1R<G!O<P``>
  1654. XM``!,`````````````P`!`!,`"0`2`#W```((``!?<W1R<G!O<P`'"```7W-T6
  1655. XM<FQE;@`'"```+F)E9VEN``*``$P,<W1R<G!O<RYC`!4,X,0-``W_`0``'TY5<
  1656. XM``!(YP@P)&T`"!@M``T$=&5M<``'(V,%<W1R:6YG``8C8P5K97D``F/_____P
  1657. XM_Q-*!&80_Q,O"DZZ^G$`&5A/3-\,$$Y=3G7__Q,O"DZZ^G$`&UA/2,#0BB9`0
  1658. XM4XM@#O\5$!.P!&8&_QL@"Y"*8-I3B[?*9.[__Q-P_V#0_PT`&P'__P@``7MIP
  1659. XM"```>VGU``!!2G-T<G-P;@``````-@````````````,``0`3``D`$@`VP``"V
  1660. XM"```7W-T<G-P;@`'"```7VEN9&5X``<(```N8F5G:6X````"@``V#'-T<G-P9
  1661. XM;BYC`!4,X,D-``O_`0``'TY5``!(YP@P)&T`""9M``P1*`H$=&5M<``"(V,%,
  1662. XM<W1R``8C8P5C:&%R<V5T``<C8_____\;($00$$B`/P`O"TZZ^G$`%5Q/2D!GA
  1663. XM!/\34H1@Z/__&R`$D(I,WPP03EU.=?\-`!0!__\(``%[:0@``'MI]0````!!N
  1664. XM2G-T<G1O:P``````8``````````$``0``@`7``D`%0!2P``""```7W-T<G1O'
  1665. XM:P`'"```7W-T<G-P;@`'"```7W-T<G!B<FL`!P@``"YB96=I;@`"@`!@"8``F
  1666. XM``QS=')T;VLN8P`5#.#,#0`,_P$``!].50``2.<,,"1M``@F;0`,!F9R;VU,5
  1667. XM87-T5&EM90```2-C!&5N9``#(V,$=&]K96X``B-C!6)U9@`&(V,%<V5P87)A>
  1668. XM=&]R<P`'(V/_______\9(`IG!"`*8`0@+=`"80`3*`!G//\5+PLO!$ZZ^G$`=
  1669. XM%5!/2,#8@/\5($1*$&8*_QEP`$S?##!.74YU_Q4O"R\$3KKZ<@`?4$\J`&<&]
  1670. XM(`52@&`"<``K0-""80#___\3($5"$/__$R`$8-;_#0`=`?__"``!>VD(``)[S
  1671. XM(V,(``![(V/U````04IT;VEN=````````%0````````````"``$`$``)``\`\
  1672. XM,\```@@``%]T;VEN=``'"```+F)E9VEN`````H``5`QT;VEN="YC`!4,X-<-2
  1673. XM``W_`0``&4Y5```O!!@M``D%8P`"8___&[@\`#!M%+@\`#EN#O\=$`1(@)!\"
  1674. XM`#`H'TY=3G7_&[@\`&%M$+@\`&9N"O\9$`1(@)!\`%=@Y/\;N#P`06T0N#P`^
  1675. XM1FX*_QD0!$B`D'P`-V#.__\3</]@RO\-`!@!__\(``![:?4`04IB87-E;F%MS
  1676. XM90```#(````````````#``(`%0`)`!,`7\```@@``%]B87-E;F%M90`'"```@
  1677. XM7W-T<G)P8G)K``<(```N8F5G:6X```*``"X"@``N#&)A<V5N86UE+F,`%1?==
  1678. XM8@T`"/\!```=3E4``$CG`#`D;0`(2'KZ(6$`,!,O"DZZ^G$`$U!/)D`$9F]O\
  1679. XM``<C8P5B=68`!B-C_____Q\@"V<&(`M2@&`"(`I,WPP`$TY=3G7_$SHO```-7
  1680. XM``X!__\(``%[(V,(``![(V,)5$585`!#"4)/3TP`:0E50T]53E0`20E#3U5.]
  1681. XM5`!I"41/54),10!D"49,3T%4`&8)55-(3U)4`$D)4TA/4E0`:0E#4%12`$P):
  1682. XM05!44@`C(T,)4U124%12`"-#"4)95$5"2513`$,)54)95$4`0PE"651%`&,).
  1683. XM5T]21$))5%,`20E55T]21`!)"5=/4D0`:0E,3TY'0DE44P!,"55,3TY'`$P)B
  1684. XM3$].1P!L]0````!!2G-T<FEC;7``````H`````````````,``0`4``D`$P!5'
  1685. XMP``""```7W-T<FEC;7``!P@``%]T;VQO=V5R``<(```N8F5G:6X``````H``I
  1686. XMH`QS=')I8VUP+F,`%0S@KPT`"?\!```?3E4``$CG"#`D;0`()FT`#!%X``1I<
  1687. XM;F1E>``":05S='(Q``8C8P5S='(R``<C8_____\?2C)``&<N2C-``&<H$#)`,
  1688. XM`!5(@#\`3KKZ<0`=5$\_`!`S0`!(@#\`3KKZ<0`75$\R'[)`9@3__Q-21&#,%
  1689. XM__\9$#)``$B`/P!.NOIQ`!U43S\`$#-``$B`/P!.NOIQ`!]43S(?LD!L!'#_S
  1690. XM8"H0,D``%4B`/P!.NOIQ`!U43S\`$#-``$B`/P!.NOIQ`!]43S(?LD!O!'`!`
  1691. XM8`)P`$S?%0P03EU.=?__#0`5`?__"``!>VD(``![:?4`````04IS=')N:6-M4
  1692. XM<````*P````````````#``$`%``)`!,`6L```@@``%]S=')N:6-M<``'"```2
  1693. XM7W1O;&]W97(`!P@``"YB96=I;@````*``*P,<W1R;FEC;7`N8P`5#."T#0`)S
  1694. XM_P$``!].50``2.<,,"1M``@F;0`,%3@M`!!Z``1I;F1E>``#:05S='(Q``8CI
  1695. XM8P5S='(R``<C8P5L96X``FG______Q]*,E``9S9*,U``9S`P!%-`';I`;"@08
  1696. XM,E``2(`_`$ZZ^G$`'51//P`0,U``2(`_`$ZZ^G$`%U1/,A^R0&8$__\34D5@W
  1697. XMQ/__&1`R4`!(@#\`3KKZ<0`=5$\_`!`S4`!(@#\`3KKZ<0`?5$\R'[)`;`1P8
  1698. XM_V`J$#)0`!5(@#\`3KKZ<0`=5$\_`!`S4`!(@#\`3KKZ<0`?5$\R'[)`;P1P>
  1699. XM`6`"<`!,WQ4,,$Y=3G7__PT`%@'__P@``7MI"```>VGU````04IS=')R<&)R%
  1700. XM:P```%8````````````$``$`%@`)`!4`1<```@@``%]S=')R<&)R:P`'"```Q
  1701. XM7W-T<FQE;@`'"```7VEN9&5X``<(```N8F5G:6X``H``5@QS=')R<&)R:RYCN
  1702. XM`!4,X,`-``G_`0``'TY5``!(YP@P)&T`""9M``P$=&5M<``"(V,%<W1R``8C!
  1703. XM8P5C:&%R<V5T``<C8_______$R\*3KKZ<0`96$](P-"**`!3A/__'R!*4XBQ-
  1704. XMQ&<8($00$$B`/P`3+PM.NOIR`!5<3TJ`9@3_$U.$8.#__Q\@2E.(L<1G!"`$2
  1705. XM8`)P`$S?%0P03EU.=?\-`!4!__\(``%[:0@``GLC8P@``'LC8_4`````04ISP
  1706. XM=')T;V0``````P0````````````*``(`)P`)`"4!C\```@@``%]S=')T;V0`N
  1707. XM!PH``%]C='!?``<*``!?97)R;F\`!P@``%]T;VEN=``'"```+E!F;'0`!P@`J
  1708. XM`"Y0;75L``<(``!?<W1R8VUP``<(``!?<W!R:6YT9@`'"```7V%T;V8`!P@`N
  1709. XM`"YB96=I;@````*``MH"@`+:#'-T<G1O9"YC`!49;\`-`#3_`0``%TY5_ZI(U
  1710. XMYP@P`F)U9F9E<@#_JELP8P)B=69L:6T`_^HC8P)B=69O<F<`_^XC8P1C``)IN
  1711. XM!&1P``<C8P1S<``&(V,"<V%V90#_\B-C`F5X<'0`__9I`F5S:6=N`/_X:0)D_
  1712. XM;W1S965N`/_Z:0)S8V%L90#__&D"<VEG;@#__FD#<W1R```((V,#<'1R```,&
  1713. XM(R-C______________\3)&T`"/\5#!(`(&8$_Q-2BF#V__\5.WP``?_^__\5E
  1714. XM#!(`+68&_Q-5;?_^_Q%2BO___Q-";?_Z_Q-";?_\_Q5![?^J)DC__Q<@2U*+>
  1715. XM$+P`,/\7($M2BQ"\`"[__Q,K2__N_Q=![?_:*TC_ZO__%2M*__)@9O__%;A\'
  1716. XM`"YF#/__%4IM__IF8O___Q-2;?_Z__\78%(P!%)`0?KZ<0`7"#```@``9@+_>
  1717. XM$6!*__\5N'P`,&8D__\5M^W_[F<2____%;?M_^ID"O\5($M2BQ"$_Q-2;?_\B
  1718. XM____$6`*_____Q5*;?_Z9P3_$U-M__S__Q%@%O___Q6W[?_J9`;_%2!+4HL0K
  1719. XMA/___Q5*;?_Z9@3_$U)M__S__QE2BA`22(`X`&:2_Q6U[?_R9B#_%4JM``QGT
  1720. XM"/\7(&T`#""M``C_$SM\``K0A'(`_QMP`'(`3-\,$$Y=3G7___\=M^W_[F,,P
  1721. XM#"L`,/__9@3_$U.+8.[__Q6W[?_N9@C_%R!+4HL0O``P__\10A/_________6
  1722. XM_____Q,K2O_R_Q-";?_V_Q4[?``!__C___\9($I2BA`02(`X`/__';A\`&5G%
  1723. XM"+A\`$5F``">____&2!*4HH0$$B`.`#__Q6X?``M9A#_$U5M__C_&2!*4HH0D
  1724. XM$$B`.`#_'6`6N'P`*V<&N'P`(&8*_QD@2E**$!!(@#@`____%3`$4D!!^OIQN
  1725. XM`!<(,``"``!G5O___Q6X?``P9@S_&R!*4HH0$$B`.`!@[O__$6`@_Q,_!$ZZP
  1726. XM^G,`'U1/,BW_]L/\``K003M`__8?($I2BA`02(`X`#`$4D!!^OIQ`!<(,``"/
  1727. XM``!FT/__%4IM__AL!/\31&W_]O__%R!*4X@K2/_R_____Q5*K0`,9PC_%R!M#
  1728. XM``P@K?_R__\7,"W__-%M__;___\3.WP`"="$<@#__Q<,;0$U__9O'O\7,"W_X
  1729. XM_DC`3KKZ=``=)#Q_[___)CS___]53KKZ=0`38`#^U/\7#&T!-?_V9C+_$4AZY
  1730. XM^B%A`#`5+RW_[DZZ^G8`%5!/2D!O'O\7,"W__DC`3KKZ=``=)#Q_[___)CS_%
  1731. XM__]53KKZ=0`38`#^G/\98$X,;?Z]__9L%O\7,"W__DC`3KKZ=``5=`!V`$ZZ]
  1732. XM^G4`$V``_GS_%PQM_KW_]F8H_Q%(>OHA80!2@14O+?_N3KKZ=@`54$]*0&P6@
  1733. XM_Q<P+?_^2,!.NOIT`!5T`'8`3KKZ=0`38`#^3/______%3\M__9(>OHA80!5E
  1734. XM@A,O"TZZ^G<`$T_O``K_$4)MT`)R`/\52&W_JDZZ^G@`'UA/+P$O`#(M__Y(;
  1735. XMP2`!3KKZ=``9)``F`2`?(A].NOIU`!-@`/X,_Q\Q-SDW-CDS,3,T.#8R,S$T8
  1736. XM'S<`-#DT,#8U-C0U.#0Q,C09-C4T-`!E)60```T`T@'__P@`!WMI"``&>VD(9
  1737. XM``)I"``!6S!C"```>V0(``-[:0E415A4`$,)0D]/3`!I"55#3U5.5`!)"4-/R
  1738. XM54Y4`&D)1$]50DQ%`&0)1DQ/050`9@E54TA/4E0`20E32$]25`!I"4-05%(`H
  1739. XM3`E!4%12`",C0PE35%)05%(`(T,)0EE414))5%,`0PE50EE410!#"4)95$4`W
  1740. XM8PE73U)$0DE44P!)"5573U)$`$D)5T]21`!I"4Q/3D="2513`$P)54Q/3D<`Y
  1741. XM3`E,3TY'`&P(``A[9/4`````04IS=')D=7```````$0````````````&``$`-
  1742. XM'``)`!L`1L```@@``%]S=')D=7``!P@``%]S=')L96X`!P@``%]M86QL;V,`]
  1743. XM!PH``%]E<G)N;P`'"```7W-T<F-A=``'"```+F)E9VEN`````H``1`QS=')DF
  1744. XM=7`N8P`5&6Y?#0`+_P$``!].50``2.<`,"1M``@O"DZZ^G$`%5A//P!.NOIR>
  1745. XM`!-43R9`!&1U<``'(V,%<W1R``8C8_____\3(`MF$/\3.WP``]"$<P#_&7``K
  1746. XM3-\,`$Y=3G7___\3(`MG"O\5+PHO"TZZ^G0`$5!/____$R`+8.;_#0`;`?__E
  1747. XM"``$>VD(``%[:0@``'LC8P@``GLC8P@``VGU`$%*9V5T8W=D``````&:````^
  1748. XM````````#@`%`#D`"0`T`7#```((``!?9V5T8W=D``<(``!?;6%L;&]C``<*8
  1749. XM``!?97)R;F\`!P@``%],;V-K``<(``!?9G)E90`'"```7U5N3&]C:P`'"```5
  1750. XM7T%L;&]C365M``<(``!?4&%R96YT1&ER``<(``!?1G)E94UE;0`'"```7T5X:
  1751. XM86UI;F4`!P@``%]S=')L96X`!P@``%]S=')C870``@``AE]F;VQL;W<`!P@`8
  1752. XM`"YB96=I;@`````"@`"$`H``A`*``98"@`&$`H`!E@QG971C=V0N8P`5&2:'N
  1753. XM#0`2_P$``!E.50``2.<(('@`!&UA;&QO8V5D``)I"D9I;&5,;V-K``1L;V-K:
  1754. XM``8C.@`!`V)U9@``""-C`W-I>F4```QI________%4JM``AF(O\5/RT`#$ZZ/
  1755. XM^G$`%U1/*T``"&80_Q,[?``#T(1R`/\9<`!,WP003EU.=?__$7@!_____Q5(V
  1756. XM>/_^2'KZ(6$`,!%.NOIS`!-03R1`__\5(&T`"$(0__\?/RT`#"\M``@O"F$R^
  1757. XM3^\`"A-*0&8:__\32D1G"O\5+RT`"$ZZ^G0`$5A/____$R\*3KKZ=0`16$__2
  1758. XM_Q-P`&"R____$R\*3KKZ=0`16$___Q4@+0`(8*3_$0``#0`V_P$``A=.50``'
  1759. XM2.<(,`1N97=L;V-K``<C.@`!"D9I;&5);F9O0FQO8VL`"D1A=&53=&%M<``+<
  1760. XM``,``P`,`61S7T1A>7,```!L`61S7TUI;G5T90``!&P!9'-?5&EC:P``"&P+@
  1761. XM``(`"@$$`69I8E]$:7-K2V5Y````;`%F:6)?1&ER16YT<GE4>7!E```$;`%F]
  1762. XM:6)?1FEL94YA;64```A;,&,!9FEB7U!R;W1E8W1I;VX``'1L`69I8E]%;G1RC
  1763. XM>51Y<&4``'AL`69I8E]3:7IE``!\;`%F:6)?3G5M0FQO8VMS``"`;`%F:6)?O
  1764. XM1&%T90``A#H``P%F:6)?0V]M;65N=```D%LP8P%P861D:6YG``#@6S!C!&9I:
  1765. XM8@`&(SH``@-L;V-K```((SH``0-B=68```PC8P-S:7IE```0:?__________:
  1766. XM%4JM``AF"O\9<`%,WPP03EU.=?___QM(>0`!```_/`$$3KKZ=@`37$\D0/__T
  1767. XM$R`*9@3_$W``8-[__Q4O+0`(3KKZ=P`36$\F0/__'S\M`!`O+0`,+PMAMD_O'
  1768. XM``H32D!F$/\7/SP!!"\*3KKZ>``17$__$W``8*[___\7+PHO+0`(3KKZ>0`7U
  1769. XM4$]*0&<``(P!``,$8P`"8____Q4O+0`,3KKZ>@`;6$\_`"!*4(@O"$ZZ^GH`8
  1770. XM'5A/,A_20%1!LFT`$&\2_Q<_/`$$+PI.NOIX`!%<3_\5<`!@`/]H____&2`+]
  1771. XM9RXO+0`,3KKZ>@`?6$]30"!M``P8,```N#P`.A=G%+@\`"]G#O\12'KZ(60`<
  1772. XM,!4O+0`,3KKZ>P`14$____\;($I0B"\(+RT`#$ZZ^GL`$5!/__\3(`MF#O\1`
  1773. XM2'KZ(60`,A4O+0`,3KKZ>P`14$______%S\\`00O"DZZ^G@`$5Q/__\5<`%@#
  1774. XM`/\"_Q,O`#H`#0!F`?__"``+>VD(``I[:0@`"7MI"``(>VD(``5[:0@`!'MIE
  1775. XM!V9O;&QO=P``#'MI"``#>R,Z``$(``=[(SH``0@`!GLC.@`""``!>R-C"``"2
  1776. XM:0E"4U12`&P)0E!44@!L"```>R-C"51%6%0`0PE"3T],`&D)54-/54Y4`$D)W
  1777. XM0T]53E0`:0E$3U5"3$4`9`E&3$]!5`!F"5532$]25`!)"5-(3U)4`&D)0U!4H
  1778. XM4@!,"4%05%(`(R-#"5-44E!44@`C0PE"651%0DE44P!#"55"651%`$,)0EE4$
  1779. XM10!C"5=/4D1"2513`$D)55=/4D0`20E73U)$`&D)3$].1T))5%,`3`E53$].W
  1780. XM1P!,"4Q/3D<`;/4`````04IC:&1I<@```````&`````````````&``$`'0`)/
  1781. XM`!P`A<```@@``%]C:&1I<@`'"@``7V5R<FYO``<(``!?9FEL971Y<&4`!P@`)
  1782. XM`%],;V-K``<(``!?0W5R<F5N=$1I<@`'"```+F)E9VEN``````*``&`,8VADW
  1783. XM:7(N8P`5&5.2#0`-_P$``!-.5?_\"D9I;&5,;V-K``)L;V-K`/_\(SH``0-P4
  1784. XM871H```((V/_____%4JM``AF#/\3.WP`"]"$<0#_%7#_3EU.=?___Q4O+0`(-
  1785. XM3KKZ<@`76$^P?``!9PK_$SM\``'0A'$`_Q-P_V#B____&4AX__XO+0`(3KKZ;
  1786. XM<P`74$\K0/_\9@K_$SM\``C0A'$`_Q-P_V#$____%2\M__Q.NOIT`!583RM``
  1787. XM__S__Q-P`&"R_PT`)`'__P@`!'LC.@`!"``#>R,Z``$(``%I"4)35%(`;`E"S
  1788. XM4%12`&P(``)[:0@``'MI"51%6%0`0PE"3T],`&D)54-/54Y4`$D)0T]53E0`M
  1789. XM:0E$3U5"3$4`9`E&3$]!5`!F"5532$]25`!)"5-(3U)4`&D)0U!44@!,"4%07
  1790. XM5%(`(R-#"5-44E!44@`C0PE"651%0DE44P!#"55"651%`$,)0EE410!C"5=/C
  1791. XM4D1"2513`$D)55=/4D0`20E73U)$`&D)3$].1T))5%,`3`E53$].1P!,"4Q/7
  1792. XM3D<`;/4``$%*9FEL971Y<&4```!\````````````"``!`",`"0`B`-K```((:
  1793. XM``!?9FEL971Y<&4`!P@``%]!;&QO8TUE;0`'"@``7V5R<FYO``<(``!?3&]C;
  1794. XM:P`'"```7T5X86UI;F4`!P@``%]5;DQO8VL`!P@``%]&<F5E365M``<(```NF
  1795. XM8F5G:6X````"@`!\#&9I;&5T>7!E+F,`%1ECD0T`$/\!```73E4``$CG"#`$F
  1796. XM<F5S=6QT``)I"D9I;&5,;V-K``1L;V-K``<C.@`!"D9I;&5);F9O0FQO8VL`P
  1797. XM"D1A=&53=&%M<``+``,``P`,`61S7T1A>7,```!L`61S7TUI;G5T90``!&P!X
  1798. XM9'-?5&EC:P``"&P+``(`"@$$`69I8E]$:7-K2V5Y````;`%F:6)?1&ER16YT9
  1799. XM<GE4>7!E```$;`%F:6)?1FEL94YA;64```A;,&,!9FEB7U!R;W1E8W1I;VX`]
  1800. XM`'1L`69I8E]%;G1R>51Y<&4``'AL`69I8E]3:7IE``!\;`%F:6)?3G5M0FQO[
  1801. XM8VMS``"`;`%F:6)?1&%T90``A#H``P%F:6)?0V]M;65N=```D%LP8P%P861DY
  1802. XM:6YG``#@6S!C!&9I8@`&(SH``@-P871H```((V/_________&TAY``$``#\\U
  1803. XM`01.NOIQ`!=<3R1`2H!F$/\3.WP``]"$<@#_&7#_3-\,$$Y=3G7___\92'C_!
  1804. XM_B\M``A.NOIS`!=03R9`2H!F"O\3.WP`"-"$<@#_$W#_8-K___\5+PHO"TZZ,
  1805. XM^G0`$5!/__\=2JH`!&\$<`%@`G`".`#__Q,O"TZZ^G4`$5A/_Q<_/`$$+PI.X
  1806. XMNOIV`!%<3___$S`$8*K_#0`M`?__"``&>VD(``5[:0@`!'MI"``#>R,Z``$(L
  1807. XM``%[(SH``@@``FD)0E-44@!L"4)05%(`;`@``'MI"51%6%0`0PE"3T],`&D)/
  1808. XM54-/54Y4`$D)0T]53E0`:0E$3U5"3$4`9`E&3$]!5`!F"5532$]25`!)"5-(*
  1809. XM3U)4`&D)0U!44@!,"4%05%(`(R-#"5-44E!44@`C0PE"651%0DE44P!#"55"E
  1810. XM651%`$,)0EE410!C"5=/4D1"2513`$D)55=/4D0`20E73U)$`&D)3$].1T))J
  1811. X85%,`3`E53$].1P!,"4Q/3D<`;/4`````G
  1812. X``
  1813. Xend
  1814. Xsize 13164
  1815. SHAR_EOF
  1816. echo "End of archive 1 (of 2)"
  1817. # if you want to concatenate archives, remove anything after this line
  1818. exit
  1819.